package cn.piesat.mapper;

import com.alibaba.fastjson.JSON;
import cn.piesat.dto.PiesatUserInfoConfigDTO;
import cn.piesat.vo.userInfoConfig.AddUserInfoConfigVO;
import cn.piesat.vo.userInfoConfig.PartUserInfoConfigVO;
import cn.piesat.vo.userInfoConfig.UserInfoConfigVO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 用户配置项信息映射关系
 *
 * @author xhl
 */
@Mapper
public interface UserInfoConfigMapper {

    UserInfoConfigMapper INSTANCE = Mappers.getMapper(UserInfoConfigMapper.class);

    /**
     * 用户配置项信息数据传输类 ---> 用户配置项信息实体类
     * @param userInfoConfigDTO 用户配置项信息数据传输对象
     * @return
     */
    default PiesatUserInfoConfigDTO userInfoConfigDtoToUserInfoDo(AddUserInfoConfigVO userInfoConfigDTO) {
        PiesatUserInfoConfigDTO piesatUserInfoConfigDTO = new PiesatUserInfoConfigDTO();
        piesatUserInfoConfigDTO.setId(userInfoConfigDTO.getId());
        piesatUserInfoConfigDTO.setField(userInfoConfigDTO.getField());
        piesatUserInfoConfigDTO.setFieldName(userInfoConfigDTO.getFieldName());
        piesatUserInfoConfigDTO.setIsNotFill(userInfoConfigDTO.getIsNotFill());
        piesatUserInfoConfigDTO.setVerifyRule(userInfoConfigDTO.getVerifyRule());
        piesatUserInfoConfigDTO.setFormType(userInfoConfigDTO.getFormType());
        List<String> formOption = userInfoConfigDTO.getFormOption();
        if (formOption != null && !formOption.isEmpty()) {
            piesatUserInfoConfigDTO.setFormOption(JSON.toJSONString(formOption));
        }
        piesatUserInfoConfigDTO.setIsNotRegister(userInfoConfigDTO.getIsNotRegister());
        piesatUserInfoConfigDTO.setIsNotLogin(userInfoConfigDTO.getIsNotLogin());
        piesatUserInfoConfigDTO.setIsNotSearch(userInfoConfigDTO.getIsNotSearch());
        piesatUserInfoConfigDTO.setCreateTime(userInfoConfigDTO.getCreateTime());
        return piesatUserInfoConfigDTO;
    }

    default UserInfoConfigVO userInfoConfigDoToUserInfoConfigVo(PiesatUserInfoConfigDTO piesatUserInfoConfigDTO) {
        UserInfoConfigVO userInfoConfigVO = new UserInfoConfigVO();
        userInfoConfigVO.setId(piesatUserInfoConfigDTO.getId());
        userInfoConfigVO.setField(piesatUserInfoConfigDTO.getField());
        userInfoConfigVO.setFieldName(piesatUserInfoConfigDTO.getFieldName());
        userInfoConfigVO.setIsNotFill(piesatUserInfoConfigDTO.getIsNotFill());
        userInfoConfigVO.setVerifyRule(piesatUserInfoConfigDTO.getVerifyRule());
        userInfoConfigVO.setFormType(piesatUserInfoConfigDTO.getFormType());
        String formOption = piesatUserInfoConfigDTO.getFormOption();
        if (formOption != null) {
            userInfoConfigVO.setFormOption(JSON.parseArray(formOption,String.class));
        }
        userInfoConfigVO.setIsNotRegister(piesatUserInfoConfigDTO.getIsNotRegister());
        userInfoConfigVO.setIsNotLogin(piesatUserInfoConfigDTO.getIsNotLogin());
        userInfoConfigVO.setIsNotSearch(piesatUserInfoConfigDTO.getIsNotSearch());
        userInfoConfigVO.setCreateTime(piesatUserInfoConfigDTO.getCreateTime());
        return userInfoConfigVO;
    }

    default PartUserInfoConfigVO userInfoConfigDto2LoginConfigVo(PiesatUserInfoConfigDTO piesatUserInfoConfigDTO) {
        PartUserInfoConfigVO vo = new PartUserInfoConfigVO();
        vo.setId(piesatUserInfoConfigDTO.getId());
        vo.setField(piesatUserInfoConfigDTO.getField());
        vo.setFieldName(piesatUserInfoConfigDTO.getFieldName());
        vo.setIsNotFill(piesatUserInfoConfigDTO.getIsNotFill());
        vo.setVerifiRule(piesatUserInfoConfigDTO.getVerifyRule());
        String formOption = piesatUserInfoConfigDTO.getFormOption();
        if (formOption != null) {
            vo.setFormOption(JSON.parseArray(formOption,String.class));
        }
        vo.setFormType(piesatUserInfoConfigDTO.getFormType());
        return vo;
    }

    default PartUserInfoConfigVO userInfoConfigDto2RegisterConfigVo(PiesatUserInfoConfigDTO piesatUserInfoConfigDTO) {
        PartUserInfoConfigVO vo = new PartUserInfoConfigVO();
        vo.setId(piesatUserInfoConfigDTO.getId());
        String field = piesatUserInfoConfigDTO.getField();
        vo.setField(field);
        vo.setFieldName(piesatUserInfoConfigDTO.getFieldName());
        vo.setIsNotFill(piesatUserInfoConfigDTO.getIsNotFill());
        vo.setVerifiRule(piesatUserInfoConfigDTO.getVerifyRule());
        String formOption = piesatUserInfoConfigDTO.getFormOption();
        if (formOption != null) {
            vo.setFormOption(JSON.parseArray(formOption, String.class));
        }
        String formType = piesatUserInfoConfigDTO.getFormType();
        if (("email".equals(field) && "input-email".equals(formType))
                || ("telephone".equals(field) && "input-telephone".equals(formType))) {
            formType = "input";
        }
        vo.setFormType(formType);
        return vo;
    }

    default PartUserInfoConfigVO userInfoConfigDto2SearchConfigVo(PiesatUserInfoConfigDTO piesatUserInfoConfigDTO) {
        PartUserInfoConfigVO vo = new PartUserInfoConfigVO();
        vo.setId(piesatUserInfoConfigDTO.getId());
        String field = piesatUserInfoConfigDTO.getField();
        vo.setField(field);
        vo.setFieldName(piesatUserInfoConfigDTO.getFieldName());
        String formOption = piesatUserInfoConfigDTO.getFormOption();
        if (formOption != null) {
            vo.setFormOption(JSON.parseArray(formOption, String.class));
        }
        String formType = piesatUserInfoConfigDTO.getFormType();
        if (("email".equals(field) && "input-email".equals(formType))
                || ("telephone".equals(field) && "input-telephone".equals(formType))) {
            formType = "input";
        }
        vo.setFormType(formType);
        return vo;
    }
}
